home *** CD-ROM | disk | FTP | other *** search
/ CYBER.XPO.95 / CYBER.XPO.95 (Arsenal Computer).ISO / arsenal2 / dosshell / rar1_51.exe / rar / TECHNOTE.DOC < prev    next >
Text File  |  1994-06-19  |  7KB  |  280 lines

  1.  
  2.   RAR Archiver. Technical information.
  3.  
  4.   Version 1.51
  5.  
  6.  
  7. ************************************************************************
  8. THE ARCHIVE FORMAT DESCRIBED BELOW IS ONLY VALID FOR VERSIONS SINCE 1.50
  9. ************************************************************************
  10.  
  11.  
  12.    RAR archive file format
  13.  
  14.  
  15.    Archive file consists of variable length blocks.  The order
  16. of these blocks may vary, but the first block must be marker
  17. block followed by an archive header block.
  18.  
  19.    Each block begins with following fields:
  20.  
  21. HEAD_CRC       2 bytes     CRC of total block or block part
  22. HEAD_TYPE      1 byte      Block type
  23. HEAD_FLAGS     2 bytes     Block flags
  24. HEAD_SIZE      2 bytes     Block size
  25. ADD_SIZE       4 bytes     Optional field - added block size
  26.  
  27.    Field ADD_SIZE present only if (HEAD_FLAGS & 0x8000) != 0
  28.  
  29.    Total block size is HEAD_SIZE if (HEAD_FLAGS & 0x8000) == 0
  30. and HEAD_SIZE+ADD_SIZE if the field ADD_SIZE is present - when
  31. (HEAD_FLAGS & 0x8000) != 0.
  32.  
  33.    In each block the followings bits in HEAD_FLAGS have the same
  34. meaning:
  35.  
  36.   0x4000 - if set, older RAR versions will ignore the block
  37.            and remove it when the archive is updated.
  38.            if clear, the block is copied to the new archive
  39.            file when the archive is updated;
  40.  
  41.   0x8000 - if set, ADD_SIZE field is present and the full block
  42.            size is HEAD_SIZE+ADD_SIZE.
  43.  
  44.   Declared block types:
  45.  
  46. HEAD_TYPE=0x72          marker block
  47. HEAD_TYPE=0x73          archive header
  48. HEAD_TYPE=0x74          file header
  49. HEAD_TYPE=0x75          comment header
  50. HEAD_TYPE=0x76          extra information
  51.  
  52.    Comment block is actually used only within other blocks
  53. and doesn't exist separately.
  54.  
  55.    Archive processing is made in the following manner:
  56.  
  57. 1. Read and check marker block
  58. 2. Read archive header
  59. 3. Read or skip HEAD_SIZE-sizeof(MAIN_HEAD) bytes
  60. 4. If end of archive encountered then terminate archive processing,
  61.    else read 7 bytes into fields HEAD_CRC, HEAD_TYPE, HEAD_FLAGS,
  62.    HEAD_SIZE.
  63. 5. Check HEAD_TYPE.
  64.    In case block read needed:
  65.          if HEAD_TYPE==0x74
  66.            read file header ( first 7 bytes already read )
  67.            read or skip HEAD_SIZE-sizeof(FILE_HEAD) bytes
  68.            read or skip FILE_SIZE bytes
  69.          else
  70.            read corresponding HEAD_TYPE block:
  71.              read HEAD_SIZE-7 bytes
  72.              if (HEAD_FLAGS & 0x8000)
  73.                read ADD_SIZE bytes
  74.    In case block skip needed:
  75.          skip HEAD_SIZE-7 bytes
  76.          if (HEAD_FLAGS & 0x8000)
  77.            skip ADD_SIZE bytes
  78. 6. go to 4.
  79.  
  80.  
  81.  
  82.    Block Formats
  83.  
  84.  
  85.    Marker block ( MARK_HEAD )
  86.  
  87.  
  88. HEAD_CRC        Always 0x6152
  89. 2 bytes
  90.  
  91. HEAD_TYPE       Header type: 0x72
  92. 1 byte
  93.  
  94. HEAD_FLAGS      Always 0x1a21
  95. 2 bytes
  96.  
  97. HEAD_SIZE       Block size = 0x0007
  98. 2 bytes
  99.  
  100.    The marker block is actually considered as a fixed byte
  101. sequence: 0x52 0x61 0x72 0x21 0x1a 0x07 0x00
  102.  
  103.  
  104.  
  105.    Archive header ( MAIN_HEAD )
  106.  
  107.  
  108. HEAD_CRC        CRC of fields HEAD_TYPE to RESERVED2
  109. 2 bytes
  110.  
  111. HEAD_TYPE       Header type: 0x73
  112. 1 byte
  113.  
  114. HEAD_FLAGS      Bit flags:
  115. 2 bytes
  116.                 0x01    - Volume attribute (archive volume)
  117.                 0x02    - Archive comment present
  118.                 0x04    - Archive lock attribute
  119.                 0x08    - Solid attribute (solid archive)
  120.                 0x10    - Unused
  121.                 0x20    - Authenticity information present
  122.  
  123.                 other bits in HEAD_FLAGS are reserved for
  124.                 internal use
  125.  
  126. HEAD_SIZE       Archive header total size including archive
  127. 2 bytes         comments and other added fields
  128.  
  129. RESERVED1       Reserved
  130. 2 bytes
  131.  
  132. RESERVED2       Reserved
  133. 4 bytes
  134.  
  135.  
  136. Comment block   present if (HEAD_FLAGS & 0x02) != 0
  137.  
  138.  
  139. ????            Other included blocks - reserved for
  140.                 future use
  141.  
  142.  
  143.  
  144.    File header (File in archive)
  145.  
  146.  
  147. HEAD_CRC        CRC of fields from HEAD_TYPE to FILEATTR
  148. 2 bytes         and file name
  149.  
  150. HEAD_TYPE       Header type: 0x74
  151. 1 byte
  152.  
  153. HEAD_FLAGS      Bit flags:
  154. 2 bytes
  155.                 0x01 - file continued from previous volume
  156.                 0x02 - file continued in next volume
  157.                 0x04 - file encrypted with password
  158.                 0x08 - file comment present
  159.  
  160.                 (HEAD_FLAGS & 0x8000) == 1, because full
  161.                 block size is HEAD_SIZE + PACK_SIZE
  162.  
  163. HEAD_SIZE       File header full size including file name,
  164. 2 bytes         comments and other added fields
  165.  
  166. PACK_SIZE       Compressed file size
  167. 4 bytes
  168.  
  169. UNP_SIZE        Uncompressed file size
  170. 4 bytes
  171.  
  172. HOST_OS         Operating system used for archiving
  173. 1 byte          (value 0 stands for MS DOS)
  174.  
  175. FILE_CRC        File CRC
  176. 4 bytes
  177.  
  178. FTIME           Date and time in standard MS DOS format
  179. 4 bytes
  180.  
  181. UNP_VER         RAR version needed to extract file
  182. 1 byte
  183.  
  184. METHOD          Packing method
  185. 1 byte
  186.  
  187. NAME_SIZE       File name size
  188. 2 bytes
  189.  
  190. ATTR            File attributes
  191. 4 bytes
  192.  
  193. FILE_NAME       File name - string of NAME_LEN bytes size
  194.  
  195.  
  196. Comment block   present if (HEAD_FLAGS & 0x08) != 0
  197.  
  198.  
  199. ????            Other extra included blocks - reserved for
  200.                 future use
  201.  
  202.  
  203.  
  204.   Comment block
  205.  
  206.  
  207. HEAD_CRC        CRC of fields from HEAD_TYPE to COMM_CRC
  208. 2 bytes
  209.  
  210. HEAD_TYPE       Header type: 0x75
  211. 1 byte
  212.  
  213. HEAD_FLAGS      Bit flags
  214. 2 bytes
  215.  
  216. HEAD_SIZE       Comment header size + comment size
  217. 2 bytes
  218.  
  219. UNP_SIZE        Uncompressed comment size
  220. 2 bytes
  221.  
  222. UNP_VER         RAR version needed to extract comment
  223. 1 byte
  224.  
  225. METHOD          Packing method
  226. 1 byte
  227.  
  228. COMM_CRC        Comment CRC
  229. 2 bytes
  230.  
  231. COMMENT         Comment text
  232.  
  233.  
  234.  
  235.   Extra info block
  236.  
  237.  
  238. HEAD_CRC        Block CRC
  239. 2 bytes
  240.  
  241. HEAD_TYPE       Header type: 0x76
  242. 1 byte
  243.  
  244. HEAD_FLAGS      Bit flags
  245. 2 bytes
  246.  
  247. HEAD_SIZE       Total block size
  248. 2 bytes
  249.  
  250. INFO            Other data
  251.  
  252.  
  253.  
  254.    APPLICATION NOTES
  255.  
  256.  
  257.    1. Should fields and included blocks be added in the future,
  258. their size would be included in HEAD_SIZE.
  259.  
  260.    2. To process SFX archive you need to skip the SFX module
  261. searching marker block in the archive.  There is no marker
  262. block sequence (0x52 0x61 0x72 0x21 0x1a 0x07 0x00) in the
  263. SFX module itself.
  264.  
  265.    3. The CRC is calculated using the standard polynomial
  266. 0xEDB88320.  In case the size of the CRC is less than 4
  267. bytes, only the low order bytes are used.
  268.  
  269.    4. Packing method encoding:
  270.          0x30 - storing
  271.          0x31 - fastest compression
  272.          0x32 - fast compression
  273.          0x33 - normal compression
  274.          0x34 - good compression
  275.          0x35 - best compression
  276.  
  277.    5. The RAR extraction version number is encoded as
  278. 10 * Major version + minor version.
  279.  
  280.